package com.cpems.system.domain.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 数据查询结果DTO
 * 用于封装数据查询接口的响应结果
 * 
 * @author cpems
 * @date 2025-01-10
 */
@Data
public class DataQueryResultDto {

    /**
     * 设备ID
     */
    private String clientId;

    /**
     * 设备编号
     */
    private String equipmentSn;

    /**
     * 数据类型（voltage：电压，current：电流，power：功率，energy：用电量）
     */
    private String dataType;

    /**
     * 数据值
     */
    private BigDecimal value;

    /**
     * 数据单位
     */
    private String unit;

    /**
     * 数据时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dataTime;

    /**
     * 设备状态（online：在线，offline：离线）
     */
    private String deviceStatus;

    /**
     * 最后更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date lastUpdateTime;

    /**
     * 数据质量（good：良好，bad：异常，uncertain：不确定）
     */
    private String dataQuality = "good";

    /**
     * 实时数据汇总（包含电压、电流、功率、用电量）
     */
    private RealTimeData realTimeData;

    /**
     * 历史数据列表
     */
    private List<HistoryData> historyDataList;

    /**
     * 统计数据
     */
    private StatisticsData statisticsData;

    /**
     * 设备信息映射（设备ID -> 设备数据）
     */
    private Map<String, Object> deviceDataMap;

    /**
     * 总记录数
     */
    private Long totalCount;

    /**
     * 当前页码
     */
    private Integer currentPage;

    /**
     * 每页大小
     */
    private Integer pageSize;

    /**
     * 查询耗时（毫秒）
     */
    private Long queryTime;

    /**
     * 查询是否成功
     */
    private Boolean success;

    /**
     * 查询结果消息
     */
    private String message;

    /**
     * 实时数据内部类
     */
    @Data
    public static class RealTimeData {
        /**
         * 电压值
         */
        private BigDecimal voltage;

        /**
         * 电流值
         */
        private BigDecimal current;

        /**
         * 功率值
         */
        private BigDecimal power;

        /**
         * 用电量值
         */
        private BigDecimal energy;

        /**
         * 数据时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date dataTime;

        /**
         * 设备状态
         */
        private String deviceStatus;
    }

    /**
     * 历史数据内部类
     */
    @Data
    public static class HistoryData {
        /**
         * 数据时间
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date dataTime;

        /**
         * 电压值
         */
        private BigDecimal voltage;

        /**
         * 电流值
         */
        private BigDecimal current;

        /**
         * 功率值
         */
        private BigDecimal power;

        /**
         * 用电量值
         */
        private BigDecimal energy;
    }

    /**
     * 统计数据内部类
     */
    @Data
    public static class StatisticsData {
        /**
         * 总用电量
         */
        private BigDecimal totalEnergy;

        /**
         * 平均电压
         */
        private BigDecimal avgVoltage;

        /**
         * 平均电流
         */
        private BigDecimal avgCurrent;

        /**
         * 平均功率
         */
        private BigDecimal avgPower;

        /**
         * 最大电压
         */
        private BigDecimal maxVoltage;

        /**
         * 最小电压
         */
        private BigDecimal minVoltage;

        /**
         * 最大电流
         */
        private BigDecimal maxCurrent;

        /**
         * 最小电流
         */
        private BigDecimal minCurrent;

        /**
         * 最大功率
         */
        private BigDecimal maxPower;

        /**
         * 最小功率
         */
        private BigDecimal minPower;

        /**
         * 数据点数量
         */
        private Long dataPointCount;

        /**
         * 统计时间范围开始
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date statisticsStartTime;

        /**
         * 统计时间范围结束
         */
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        private Date statisticsEndTime;
    }
}